package cases;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-10-21
 * Time: 20:14
 */
//单例模式 懒汉模式
class Singleton1{
    //唯一实例 但是不急着创建
    private static volatile Singleton1 instance = null;
    //防止类外拿到
    private Singleton1(){}

    //写一个类外拿到的方法
    public static Singleton1 getInstance(){
        //存在线程安全问题 当多个线程对instance创建的操作不是原子的 存在线程安全问题 那么加锁
        //是由代码块加锁

        if (instance == null){
            //双重if判断之后 还存在一个对new对象的过程的指令重排序的问题 在对象上加上volatile
            synchronized (Singleton1.class){ //这个锁 修饰静态方法
                //加锁后 要是大量的线程来读 并且instance != null 的前提下存在大量的锁竞争
                //那么在家一层if判断
                if (instance == null){
                    instance = new Singleton1();
                }
            }
        }
        return instance;
    }



}

public class Demo2 {
    public static void main(String[] args) {
        Singleton1 instance = Singleton1.getInstance();
    }
}
